<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <!-- 给定行和列的和求可行矩阵 -->
    <script>
      var restoreMatrix = function (rowSum, colSum) {
        let m = rowSum.length
        let n = colSum.length
        let res = Array.from({ length: m }, () => new Array(n).fill(0))
        // 只要保证每一位的数字比他所在的行和列的和都小，就可以添加
        for (let i = 0; i < m; i++) {
          // 该位置所在行允许添加的最大值
          let total = rowSum[i]
          // 每一行每一个位置的添加
          for (let j = 0; j < n; j++) {
            // 该位置所在列允许添加的最大值
            let max = colSum[j]
            // 取该位置所在行和列所能添加的最大值的最小值，添加进去
            let all = Math.min(total, max)
            res[i][j] = all
            // 添加完了之后更新所在列和所在行剩下的可以添加的最大值
            total -= all
            colSum[j] -= all
          }
        }

        return res
      }
      console.log(restoreMatrix([3, 8], [4, 7]))
    </script>
  </body>
</html>
